.TH DSA 3
.SH NAME
asn1toDSApriv, dsagen, dsasign, dsaverify, dsapuballoc, dsapubfree, dsaprivalloc, dsaprivfree, dsasigalloc, dsasigfree, dsaprivtopub - digital signature algorithm
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.br
.B #include <mp.h>
.br
.B #include <libsec.h>
.PP
.B
DSApriv*	dsagen(DSApub *opub)
.PP
.B
DSAsig*	dsasign(DSApriv *k, mpint *m)
.PP
.B
int		dsaverify(DSApub *k, DSAsig *sig, mpint *m)
.PP
.B
DSApub*	dsapuballoc(void)
.PP
.B
void		dsapubfree(DSApub*)
.PP
.B
DSApriv*	dsaprivalloc(void)
.PP
.B
void		dsaprivfree(DSApriv*)
.PP
.B
DSAsig*	dsasigalloc(void)
.PP
.B
void		dsasigfree(DSAsig*)
.PP
.B
DSApub*	dsaprivtopub(DSApriv*)
.PP
.B
DSApriv*	asn1toDSApriv(uchar *priv, int npriv)
.SH DESCRIPTION
.PP
DSA is the NIST approved digital signature algorithm.  The owner of a key publishes
the public part of the key:
.EX
	struct DSApub
	{
		mpint	*p;	// modulus
		mpint	*q;	// group order, q divides p-1
		mpint	*alpha;	// group generator
		mpint	*key;	// alpha**secret mod p
	};
.EE
This part can be used for verifying signatures (with
.IR dsaverify )
created by the owner.
The owner signs (with
.IR dsasign )
using his private key:
.EX
	struct DSApriv
	{
		DSApub	pub;
		mpint	*secret; // (decryption key)
	};
.EE
.PP
Keys are generated using
.IR dsagen .
If
.IR dsagen 's
argument
.I opub
is
.BR nil ,
a key is created using a new
.B p
and
.B q
generated by
.IR DSAprimes
(see
.IR prime (3)).
Otherwise,
.B p
and
.B q
are copied from the old key.
.PP
.I Dsaprivtopub
returns a newly allocated copy of the public key
corresponding to the private key.
.PP
The routines
.IR dsapuballoc ,
.IR dsapubfree ,
.IR dsaprivalloc ,
and
.I dsaprivfree
are provided to manage key storage.
.PP
.I Dsasign
signs message
.I m
using a private key
.I k
yielding a
.EX
	struct DSAsig
	{
		mpint	*r, *s;
	};
.EE
.I Dsaverify
returns 0 if the signature is valid and \-1 if not.
.PP
The routines
.I dsasigalloc
and
.I dsasigfree
are provided to manage signature storage.
.PP
.I Asn1toDSApriv
converts an ASN1 formatted DSA private key into the corresponding
.B DSApriv
structure; see 
.IR rsa (3)
for other ASN1 routines.
.SH SOURCE
.B \*9/src/libsec
.SH SEE ALSO
.IR mp (3),
.IR aes (3),
.IR blowfish (3),
.IR des (3),
.IR rc4 (3),
.IR rsa (3),
.IR sechash (3),
.IR prime (3),
.IR rand (3)
